package common

import (
	"database/sql/driver"
	"fmt"
	"time"
)

// SalesYearMonthlySummary 用于响应：按月份聚合的年度销售数据（按客户）
type SalesYearMonthlySummary struct {
	CustomerID        int     `json:"customerId"`
	CustomerName      string  `json:"customer_name"`
	Month             string  `json:"month"`
	Year              int     `json:"year"`
	TotalQuantity     float64 `json:"total_quantity"`
	TotalActualAmount float64 `json:"total_actual_amount"`
}

// AnnualProcurementOfVehicleSummary 年度采购车辆汇总
type AnnualProcurementOfVehicleSummary struct {
	PurchaseVehicle string  `json:"purchase_vehicle"`
	Sjzj            float64 `json:"sjzj"` // 实际总金额
	Zjs             float64 `json:"zjs"`  // 总斤数
	Zyf             float64 `json:"zyf"`  // 总运费
}

// ActualSalesOfVehicleSummary 年度销售车辆汇总
type ActualSalesOfVehicleSummary struct {
	PurchaseVehicle string  `json:"purchase_vehicle"`
	Zjatp           float64 `json:"zjatp"` // 实际销售总价格
	Zjclr           float64 `json:"zjclr"` // 总计纯利润
}

// PurchaseYearMonthlySummary 用于响应：按月份聚合的年度采购数据（按客户）
type PurchaseYearMonthlySummary struct {
	CustomerID        int     `json:"customerId"`
	CustomerName      string  `json:"customer_name"`
	Month             string  `json:"month"`
	Year              int     `json:"year"`
	TotalQuantity     float64 `json:"total_quantity"`
	TotalActualAmount float64 `json:"total_actual_amount"`
}

// 自定义日期类型
type CustomDate string

// 实现Scanner接口以从数据库中读取数据
func (cd *CustomDate) Scan(value interface{}) error {
	if v, ok := value.(time.Time); ok {
		*cd = CustomDate(v.Format("2006-01-02")) // 或者其他你需要的格式
		return nil
	}
	return fmt.Errorf("can't convert %v to CustomDate", value)
}

// 实现Valuer接口以向数据库中写入数据
func (cd CustomDate) Value() (driver.Value, error) {
	t, err := time.Parse("2006-01-02", string(cd))
	if err != nil {
		return nil, err
	}
	return t, nil
}
